package com.banyuan.array;

//查找一个数
public class ErFen {
    public static void main(String[] args) {
        int j = 1;
        int k = 11;
        j = k;
        int[] arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        int low = 0;
        int high = arr1.length - 1;

        //利用两个标不断的逼近这个值的索引，当下标大于上标时即可以判断该数组中没有所需要的值，这个等于的使用要考虑到当两个数相等时会不会出现死循环
        while (low <= high) {
            int mid = (low + high) >>> 1;//位运算符防止索引越界
            //等于中间值时是该数已经确定了直接跳出循环
            if (j == arr1[mid]) {
                System.out.println("这个值是" + "arr1[" + mid + "]:" + arr1[mid]);
                break;
                //当该值小于中间值时， 直接将中间值的索引-1复制给high
            } else if (j < arr1[mid]) {
                //mid-1即减少了次数，也防止了上面的循环条件在low = high 情况下出现死循环
                high = mid - 1;
                //当该值大于中间值的时，直接将mid+1复制给low
            } else if (j > arr1[mid]) {
                //mid+1即减少了次数，也防止了上面的循环条件在low = high 情况下出现死循环
                low = mid + 1;
            }
        }

    }
}
